import { initPreferences } from '@vben/preferences';
import { unmountGlobalLoading } from '@vben/utils';

import { overridesPreferences } from './preferences';

import 'core-js/actual/array/to-sorted';
import 'core-js/actual/promise/with-resolvers';
// 反调试检测逻辑
function antiDebugProtection() {
  if (process.env.NODE_ENV === 'production') {
    // 检测开发者工具是否打开
    const devtools = () => {
      const threshold = 100;
      const startTime = performance.now();
      debugger;
      const endTime = performance.now();
      if (endTime - startTime > threshold) {
        // 检测到调试行为
        // 移除可能影响用户体验的 alert，直接执行后续安全操作
        // 检测到非法调试行为后，直接关闭页面并清空敏感数据
        window.close();
        // 清空敏感数据
        localStorage.clear();
        sessionStorage.clear();
      }
    };

    // 定期检测
    setInterval(devtools, 2000);

    // 禁用控制台输出敏感信息
    const originalConsoleLog = console.log;
    console.log = function (...args) {
      const hasSensitive = args.some(
        (arg) =>
          typeof arg === 'string' && /(secret|key|token|password)/i.test(arg),
      );
      if (hasSensitive) {
        originalConsoleLog('检测到敏感信息输出');
        return;
      }
      originalConsoleLog.apply(console, args);
    };
  }
}

/**
 * 应用初始化完成之后再进行页面加载渲染
 */
async function initApplication() {
  // name用于指定项目唯一标识
  // 用于区分不同项目的偏好设置以及存储数据的key前缀以及其他一些需要隔离的数据
  const env = import.meta.env.PROD ? 'prod' : 'dev';
  const appVersion = import.meta.env.VITE_APP_VERSION;
  const namespace = `${import.meta.env.VITE_APP_NAMESPACE}-${appVersion}-${env}`;

  // app偏好设置初始化
  await initPreferences({
    namespace,
    overrides: overridesPreferences,
  });

  // 启动应用并挂载
  // vue应用主要逻辑及视图
  const { bootstrap } = await import('./bootstrap');
  await bootstrap(namespace);
  // 初始化反调试保护
  antiDebugProtection();
  // 移除并销毁loading
  unmountGlobalLoading();
}

initApplication();
